package pe.com.astech.web.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.NestedRuntimeException;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import pe.com.astech.web.bean.ExperienciaBean;
import pe.com.astech.web.bean.HerramientaBean;
import pe.com.astech.web.service.ExperienciaService;
import pe.com.astech.web.service.HerramientaService;
import pe.com.astech.web.util.Constantes;

@Controller
@RequestMapping(value = "/experiencia.html")
public class ExperienciaController {

	@Autowired
	HerramientaService herramientaService;
	@Autowired
	ExperienciaService experienciaService;

	private static final Log log = LogFactory.getLog(ExperienciaController.class);
	
	@RequestMapping(method = RequestMethod.POST)
	public String showForm(ModelMap model) {
		String mensajeTrazabilidad = "metodo: showForm experiencia";
		log.info(mensajeTrazabilidad);
		List<HerramientaBean> listHerramienta = null;
		try {
			listHerramienta = herramientaService.buscarHerramientas(mensajeTrazabilidad, Constantes.VACIO);
		} catch (NestedRuntimeException e) {
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR " + e.getMessage());
		}
		ExperienciaBean experienciaBean = new ExperienciaBean();
		experienciaBean.setOpcion(Constantes.NUEVO);
		
		model.put("experienciaBean", experienciaBean);
		model.put("listHerramienta", listHerramienta);
		
		return Constantes.FORM_EXPERIENCIA;
	}
	
	@RequestMapping(params={"accion=nuevaExperienciaOperario","id_empleado"}, method=RequestMethod.POST)
	public String nuevaExperienciaOperario(ModelMap model,HttpServletRequest request,@RequestParam("id_empleado")String id_empleado) {
		
		String mensajeTrazabilidad = "metodo: nuevaExperienciaOperario";
		log.info(mensajeTrazabilidad + " id_empleado " + id_empleado);
		List<HerramientaBean> listHerramienta = null;
		try{
			listHerramienta = herramientaService.buscarHerramientas(mensajeTrazabilidad, Constantes.VACIO);
		}catch(RuntimeException e){
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR " + e.getMessage());
		}
		ExperienciaBean experienciaBean = new ExperienciaBean();
		experienciaBean.setId_empleado(id_empleado);
		
		model.put("experienciaBean", experienciaBean);
		model.put("listHerramienta", listHerramienta);
		
		return Constantes.FORM_EXPERIENCIA;
	}

	
	@RequestMapping(params={"accion=guardar","calificacion","id_herramienta","tiempo","observacion","id_empleado"}, method=RequestMethod.GET)
	public @ResponseBody String guardar(ModelMap model,HttpServletRequest request,@Valid ExperienciaBean experienciaBean,BindingResult result) {
		String mensajeTrazabilidad = "metodo: guardar";
		String respuesta = Constantes.OK;
		
		log.info(mensajeTrazabilidad + " " + experienciaBean.toString());
		
		try{
			List<ExperienciaBean> lista = (List<ExperienciaBean>) request.getSession(false).getAttribute("empleadoListExperiencia");
			List<ExperienciaBean> empleadoListExperiencia = experienciaService.agregarExpLista(mensajeTrazabilidad,experienciaBean,lista);
			
			request.getSession(false).setAttribute("empleadoListExperiencia", empleadoListExperiencia);
		}catch(Exception e){
			respuesta = Constantes.NOOK;
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR " + e.getMessage());
		}
		return respuesta;
	}
	
	
	@RequestMapping(params={"accion=modificarExperienciaOperario","id_empleado","id_herramienta"}, method=RequestMethod.POST)
	public String modificarExperienciaOperario(ModelMap model,HttpServletRequest request,@Valid ExperienciaBean experienciaBean,BindingResult result) {
		
		String mensajeTrazabilidad = "metodo: modificarExperienciaOperario";
		log.info(mensajeTrazabilidad + " " + experienciaBean.toString());
				
		try{
			List<ExperienciaBean> empleadoListExperiencia = (List<ExperienciaBean>) request.getSession(false).getAttribute("empleadoListExperiencia");
			experienciaBean = experienciaService.obtenerExpLista(mensajeTrazabilidad,experienciaBean,empleadoListExperiencia);
			
		}catch(Exception e){
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR " + e.getMessage(),e);
		}
		experienciaBean.setOpcion(Constantes.ACTUALIZAR);
		model.put("experienciaBean", experienciaBean);
		
		return Constantes.FORM_EXPERIENCIA;
	}
	
	@RequestMapping(params={"accion=actualizar","calificacion","id_herramienta","herramienta","tiempo","observacion","id_empleado","id_experiencia"}, method=RequestMethod.GET)
	public @ResponseBody String actualizar(ModelMap model,HttpServletRequest request,@Valid ExperienciaBean experienciaBean,BindingResult result) {
		String mensajeTrazabilidad = "metodo: actualizar";
		String respuesta = Constantes.OK;
		
		log.info(mensajeTrazabilidad + " " + experienciaBean.toString());
		try{			
			List<ExperienciaBean> empleadoListExperiencia = (List<ExperienciaBean>) request.getSession(false).getAttribute("empleadoListExperiencia");
			log.info(mensajeTrazabilidad + " cantidad de elementos " + empleadoListExperiencia.size());
			empleadoListExperiencia = experienciaService.actualizarExpLista(mensajeTrazabilidad,empleadoListExperiencia,experienciaBean);
			log.info(mensajeTrazabilidad + " cantidad de elementos " + empleadoListExperiencia.size());
			request.getSession(false).setAttribute("empleadoListExperiencia", empleadoListExperiencia);
			
		}catch(Exception e){
			respuesta = Constantes.NOOK;
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR " + e.getMessage());
		}
		return respuesta;
	}
	
}
